<?php
namespace App\Common\Lib\Fun;

use App\Common as com;

class Run {
	/**
	 * 设置程序运行超时时间
	 * @param int $timeout 超时时间
	 * @return bool [false]失败 [true]成功s
	 */
	public static function setTimeLimit( $timeout ){
		return set_time_limit( $timeout );
	}
	
	/**
	 * 函数设置与客户机断开是否会终止脚本的执行。
	 * @param bool $setting 可选。如果设置为 true，则忽略与用户的断开，如果设置为 false，会导致脚本停止运行。 如果未设置该参数，会返回当前的设置。
	 * @return bool 本函数返回 user-abort 设置的之前的值（一个布尔值）。
	 */
	public static function ignoreUserAbort( $setting = null ){
		return ignore_user_abort( $setting );
	}
	
	/**
	 * 修改php的内存设置
	 * @param str $limit_size 内存限制
	 * @return all 成功时返回旧的值，失败时返回 FALSE。
	 */
	public static function memoryLimit( $limit_size = '128M' ){
		return ini_set( 'memory_limit', $limit_size );
	}

	/**
	 * 循环
	 * @param \Closure $fn 执行闭包 $fn():bool [false]终止
	 * @param int $intervalTimeMs 间隔时间，间隔时间会扣除执行闭包运行的时间
	 * @return void
	 */
	public static function whileInterval( \Closure $fn, int $intervalTimeMs = 0 ) {
		while( true ){
			$startRunTimeMs = com\Lib\Fun\Time::getTimeOfMillitime();
			//
			call_user_func( $fn );
			//
			$waitTimeMs = $intervalTimeMs - ( com\Lib\Fun\Time::getTimeOfMillitime() - $startRunTimeMs );
			if( $waitTimeMs > 0 ){
				\Swoole\Coroutine::sleep( $waitTimeMs / 1000 );
			}
		}
	}
	
}
